POI读取Excel生成JSON数据 | 开发吧

创建时间:2016/3/25 16:20
来源:http://www.devba.com/index.php/archives/6487.html


首页 > Java开发 > POI读取Excel生成JSON数据

POI读取Excel生成JSON数据

作者:孤风一剑   发布:2016-02-15 09:55   栏目:Java开发   点击:123次   抢沙发  

背景:项目需要一个全国省份的国标码JSON数据,网上找了一圈,没有找到合适的,但是自己有Excel版本的数据,于是乎,不想copy数据,就写了一个小程序,用POI读取Excel,然后生成JSON数据

Java代码
  1. package com.besttone.util;  
  2.   
  3. import java.io.BufferedWriter;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.InputStream;  
  9. import java.io.ObjectOutputStream;  
  10. import java.io.OutputStream;  
  11. import java.io.OutputStreamWriter;  
  12. import java.nio.Buffer;  
  13. import java.text.SimpleDateFormat;  
  14. import java.util.Date;  
  15.   
  16. import org.apache.poi.hssf.usermodel.HSSFCell;  
  17. import org.apache.poi.hssf.usermodel.HSSFDateUtil;  
  18. import org.apache.poi.hssf.usermodel.HSSFRow;  
  19. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  20. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  21. import org.apache.poi.ss.usermodel.Cell;  
  22. import org.apache.poi.ss.usermodel.Workbook;  
  23.   
  24.   
  25. public class CreateProvinceJsonUtil {  
  26.   
  27.     /** 
  28.      * @description: 根据excel文件生成对应的json字符串 
  29.      * @return 
  30.      * @throws FileNotFoundException 
  31.      */  
  32.     public static String createJson() throws FileNotFoundException {  
  33.         InputStream is = new FileInputStream("E:\\信令项目\\provinceCode.xls");  
  34.         StringBuffer buffer = new StringBuffer();  
  35.         try {  
  36.             Workbook workbook = new HSSFWorkbook(is);  
  37.             HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);  
  38.             String key = "";  
  39.             String value = "";  
  40.             buffer.append("[");              
  41.             for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {  
  42.                 HSSFRow row = sheet.getRow(i);  
  43.                 for(int j=0;j<row.getPhysicalNumberOfCells();j++){  
  44.                     HSSFCell cell = row.getCell(j);                      
  45.                    if(i==0){  
  46.                        if(j==0){  
  47.                            key = cell.getStringCellValue();                             
  48.                        }  
  49.                        if(j==1){  
  50.                            value = cell.getStringCellValue();                             
  51.                        }  
  52.                    } else{  
  53.                        if(j==0){  
  54.                            buffer.append("{\"" + key + "\"" + ":" + "\"" +  getCellValue(cell) + "\"" + ",");  
  55.                        }  
  56.                        if(j==1){  
  57.                            buffer.append("\"" + value + "\"" + ":" + "\"" +  getCellValue(cell) + "\"}");  
  58.                        }  
  59.   
  60.                    }  
  61.                 }  
  62.                 if(sheet.getPhysicalNumberOfRows()-1!=i && i!=0){  
  63.                     buffer.append(",");  
  64.                 }  
  65.                 buffer.append("\r");  
  66.             }  
  67.             buffer.append("]");  
  68.         } catch (IOException e) {  
  69.             System.out.println("出现异常");  
  70.             e.printStackTrace();  
  71.         }  
  72.   
  73.         return buffer.toString();  
  74.     }  
  75.   
  76.     /**  
  77.      * 获取当前单元格内容  
  78.      * */    
  79.     private static String getCellValue(Cell cell){    
  80.         String value = "";    
  81.         if(cell!=null){    
  82.             switch (cell.getCellType()) {    
  83.             case Cell.CELL_TYPE_NUMERIC:    
  84.                 if(HSSFDateUtil.isCellDateFormatted(cell)){ //日期类型    
  85.                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
  86.                     Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());    
  87.                     value = sdf.format(date);    
  88.                 }else{    
  89.                     Integer data = (int) cell.getNumericCellValue();    
  90.                     value = data.toString();    
  91.                 }    
  92.                 break;    
  93.             case Cell.CELL_TYPE_STRING:    
  94.                 value = cell.getStringCellValue();    
  95.                 break;    
  96.             case Cell.CELL_TYPE_BOOLEAN:    
  97.                 Boolean data = cell.getBooleanCellValue();    
  98.                 value = data.toString();     
  99.                 break;    
  100.             case Cell.CELL_TYPE_ERROR:    
  101.                 System.out.println("单元格内容出现错误");    
  102.                 break;    
  103.             case Cell.CELL_TYPE_FORMULA:    
  104.                 value = String.valueOf(cell.getNumericCellValue());      
  105.                 if (value.equals("NaN")) {// 如果获取的数据值非法,就将其装换为对应的字符串    
  106.                     value = cell.getStringCellValue().toString();      
  107.                 }               
  108.                 break;              
  109.             case Cell.CELL_TYPE_BLANK:    
  110.                 System.out.println("单元格内容 为空值 ");    
  111.                 break;              
  112.             default :    
  113.                 value = cell.getStringCellValue().toString();    
  114.                 break;    
  115.             }    
  116.         }    
  117.         return value;    
  118.     }    
  119.       
  120.     /** 
  121.      * @description: 将生成的字符串输出到一个文件中   
  122.      * @param args 
  123.      * @throws IOException 
  124.      */  
  125.     public static void main(String[] args) throws IOException {  
  126.         String str = createJson();  
  127.         OutputStream os = new FileOutputStream("E:\\信令项目\\provinceCode.json");  
  128.         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));  
  129.         ObjectOutputStream oos = null;  
  130.         try {  
  131.             bw.write(str);  
  132.         } catch (IOException e) {  
  133.             e.printStackTrace();  
  134.         }finally{  
  135.             if(bw!=null){  
  136.                 bw.close();  
  137.             }  
  138.             if(os!=null){  
  139.                 os.close();  
  140.             }  
  141.         }  
  142.     }  
  143.   
  144. }  

要读取的excel文件:

最后生成的JSON文件


本文固定链接: http://www.devba.com/index.php/archives/6487.html | 开发吧